home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / ccsm < prev    next >
Text File  |  2009-03-10  |  4KB  |  136 lines

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful, 
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program; if not, write to the Free Software
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17. #
  18. # Authors: Quinn Storm (quinn@beryl-project.org)
  19. #          Patrick Niklaus (marex@opencompositing.org)
  20. # Copyright (C) 2007 Quinn Storm
  21.  
  22. DBUS_CCSM_SERVICE = 'org.compiz_fusion.ccsm'
  23. DBUS_CCSM_PATH = '/org/compiz_fusion/ccsm'
  24. DBUS_CCSM_INTERFACE = 'org.compiz_fusion.ccsm'
  25.  
  26. # from the D-Bus specification
  27. DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER = 1
  28.  
  29. from optparse import OptionParser
  30. import pygtk
  31. pygtk.require('2.0')
  32. import gtk
  33. import sys
  34.  
  35. def try_register_dbus ():
  36.     '''Return instance of dbus control object on success, None on failure'''
  37.     try:
  38.         import dbus, dbus.service
  39.         from dbus.mainloop.glib import DBusGMainLoop
  40.  
  41.     except ImportError:
  42.         return
  43.  
  44.     # rely on a reasonably new dbus-python
  45.     if dbus.version < (0, 80, 0):
  46.         return
  47.  
  48.     class CCSMObject(dbus.service.Object):
  49.         main_window = None
  50.  
  51.         @dbus.service.method(DBUS_CCSM_INTERFACE, in_signature='s', out_signature='')
  52.         def present (self, startup_id):
  53.             if startup_id:
  54.                 self.main_window.set_startup_id(startup_id)
  55.             else:
  56.                 self.main_window.present()
  57.  
  58.     DBusGMainLoop(set_as_default=True)
  59.  
  60.     try:
  61.         bus = dbus.SessionBus()
  62.     except dbus.DBusException:
  63.         return
  64.  
  65.     try:
  66.         obj = bus.get_object(DBUS_CCSM_SERVICE, DBUS_CCSM_PATH)
  67.         obj = dbus.Interface(obj, DBUS_CCSM_INTERFACE)
  68.     except dbus.DBusException:
  69.         # no ccsm instance running
  70.         if (bus.request_name(DBUS_CCSM_SERVICE)
  71.             == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER):
  72.             return CCSMObject(bus, DBUS_CCSM_PATH)
  73.         else:
  74.             return
  75.  
  76.     else:
  77.         try:
  78.             display = gtk.gdk.display_get_default()
  79.             startup_id = gtk.gdk.x11_display_get_startup_notification_id(display)
  80.             obj.present(startup_id or "")
  81.             print 'Another CCSM instance already running'
  82.             sys.exit(0)
  83.         except dbus.DBusException:
  84.             # error on present call so pretend it doesn't exist and start up normally
  85.             return
  86.  
  87. dbusObj = try_register_dbus()
  88.  
  89. try:
  90.     import sexy
  91.     has_sexy = True
  92. except ImportError:
  93.     print "Info: No sexy-python package found, don't worry it's optional."
  94.     has_sexy = False
  95.  
  96. if gtk.pygtk_version < (2,12,0):
  97.     raise SystemExit("PyGtk 2.12.0 or later required")
  98.  
  99. import compizconfig
  100. import ccm
  101. from ccm.Utils import GlobalUpdater
  102. from ccm.Constants import Version
  103.  
  104. plugin   = None
  105. category = None
  106. parser   = OptionParser()
  107. parser.add_option("-p", "--plugin", dest = "plugin",
  108.                   help = "Directly jump to the page of PLUGIN",
  109.                   metavar = "PLUGIN")
  110. parser.add_option("-c", "--category", dest = "category",
  111.                   help = "Directly jump to CATEGORY",
  112.                   metavar = "CATEGORY")
  113. parser.add_option("-v", "--version", dest = "version",
  114.                   action = "store_true",
  115.                   help = "Version")
  116. (options, args) = parser.parse_args()
  117. if options.version:
  118.     print "CCSM %s" % Version
  119.     sys.exit(0)
  120. if options.plugin:
  121.     plugin = options.plugin
  122. if options.category:
  123.     category = options.category
  124.  
  125. screens = ccm.getScreens()
  126. context = compizconfig.Context(screens)
  127. GlobalUpdater.SetContext (context)
  128. mainWin = ccm.MainWin(context, plugin, category)
  129. if dbusObj is not None:
  130.     dbusObj.main_window = mainWin
  131.  
  132. idle = ccm.IdleSettingsParser(context, mainWin)
  133. mainWin.show_all()
  134.  
  135. gtk.main()
  136.